<?php
// Papel.php
/**
 * Model de Papel
 * @filesource  24/12/2011
 * @author      Estrada Virtual <http://estradavirtual.com.br>
 * @copyright   Copyright <2011> Estrada Virtual
 * @package     <<application>>
 * @subpackage  <<application>>.application.models
 * @version     $Id$
 */
class Model_Papel extends Ev_Db_Table
{
    protected $_name = 'papel';
    protected $_dependentTables  = array('Model_Papel', 'Model_PapelAtividade', 'Model_PapelUsuario');
    protected $_primary = array('id_papel');

	protected $_referenceMap = array(
					'Departamento' => array(
							'columns'       => 'fk_departamento',
							'refTableClass' => 'Model_Departamento',
							'refColumns'    => 'id_departamento',
						 ),
					'Papel' => array(
							'columns'       => 'fk_papel_imediato',
							'refTableClass' => 'Model_Papel',
							'refColumns'    => 'id_papel',
						 ),
					'Usuario' => array(
							'columns'       => 'fk_usuario_responsavel',
							'refTableClass' => 'Model_Usuario',
							'refColumns'    => 'id_usuario',
						 ));

    public function getTree(Zend_Db_Table_Rowset $rowSet, $nivelInicio = 0, $nivelFim = 3)
    {
        if ($nivelInicio >= $nivelFim) {
            return array();
        }

        $tree = array();
        foreach ($rowSet as $row) {
            $registro = (object) $row->toArray();
            $filhos = array();
            $rowSetFilhos = $this->fetchAll(array('fk_papel_imediato = ?' => $row->id_papel), 'st_codigo');
            $filhos = array();
            if ($rowSetFilhos) {
                $filhos = $this->getTree($rowSetFilhos, ++$nivelInicio, $nivelFim);
            }
            $registro->filhos = $filhos;
            $tree[] = $registro;
        }
        return $tree;
    }
}
